/**
 * 
 */
package com.jf.cloud.service.sysmanager.common.taglib.html;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;

import com.jf.cloud.service.sysmanager.constant.TagConstant;

/**
 * 展现标签处理类
 * 
 * @author 程伟平 2012-2-15
 */
public class LabelTag extends AbstractHtmlFormElementTag {
	/**
	 * 
	 */
	private static final long serialVersionUID = -2033851414335092555L;

	/**
	 * 类型（text：文本；dict：字典；date：日期；）
	 */
	private String type = TagConstant.LABEL_TAG_TYPE_TEXT;

	/**
	 * 选项列表
	 */
	private List<Map<String, Object>> options;

	/**
	 * 选项键
	 */
	private String labelKey;

	/**
	 * 选项值键
	 */
	private String valueKey;

	/**
	 * 获取类型
	 * 
	 * @return 类型
	 */
	public String getType() {
		return type;
	}

	/**
	 * 设置类型
	 * 
	 * @param type 类型
	 */
	public void setType(String type) {
		this.type = type;
	}

	/**
	 * 获取选项列表
	 * 
	 * @return 选项列表
	 */
	public List<Map<String, Object>> getOptions() {
		return options;
	}

	/**
	 * 设置选项列表
	 * 
	 * @param options 选项列表
	 */
	public void setOptions(List<Map<String, Object>> options) {
		this.options = options;
	}

	/**
	 * 获取选项键
	 * 
	 * @return 选项键
	 */
	public String getLabelKey() {
		return labelKey;
	}

	/**
	 * 设置选项键
	 * 
	 * @param labelKey 选项键
	 */
	public void setLabelKey(String labelKey) {
		this.labelKey = labelKey;
	}

	/**
	 * 获取选项值键
	 * 
	 * @return 选项值键
	 */
	public String getValueKey() {
		return valueKey;
	}

	/**
	 * 设置选项值键
	 * 
	 * @param valueKey 选项值键
	 */
	public void setValueKey(String valueKey) {
		this.valueKey = valueKey;
	}

	@Override
	public int doStartTag() throws JspException {
		JspWriter writer = pageContext.getOut();

		// 展现标签
		StringBuffer sb = new StringBuffer();
		sb.append("<span");
		if (id != null && id.length() > 0) {
			sb.append(" id=\"");
			sb.append(id);
			sb.append("\"");
		}
		if (cssClass != null && cssClass.length() > 0) {
			sb.append(" class=\"");
			sb.append(cssClass);
			sb.append("\"");
		}
		if (style != null && style.length() > 0) {
			sb.append(" style=\"");
			sb.append(style);
			sb.append("\"");
		}
		sb.append(">");

		// 文本
		if (TagConstant.LABEL_TAG_TYPE_TEXT.equals(type)) {
			sb.append(value);
		}
		// 字典
		else if (TagConstant.LABEL_TAG_TYPE_DICT.equals(type)) {
			if (options == null || options.size() == 0) {
				throw new JspException("展现标签类型属性为字典【type=\"dict\"】时，选项列表属性――\"options\"不能为空！");
			}

			for (Map<String, Object> option : options) {
				String val = String.valueOf(option.get(TagConstant.DICT_OPTION_VALUE_KEY));
				if (value.equals(val)) {
					sb.append(option.get(TagConstant.DICT_OPTION_LABEL_KEY));
					break;
				}
			}
		}
		// 日期
		else if (TagConstant.LABEL_TAG_TYPE_DATE.equals(type)) {
			sb.append(value.indexOf(".") == -1 ? value : value.substring(0, value.lastIndexOf(".")));
		}
		sb.append("</span>");

		try {
			writer.println(sb.toString());
		} catch (IOException ex) {
			throw new JspException("展现标签HTML输出异常！", ex);
		}

		return SKIP_BODY;
	}
}
